package com.maikobi.maikobi.common;

/**
 * 统一返回结果工具类
 * @author: Maiko7
 * @create: 2025-07-13 15:23
 */
public class ResultUtils {
    /**
     * 返回成功，带数据
     *
     * @param <T> 数据类型
     * @param data 成功返回的数据
     * @return 带有成功数据的响应对象
     */
    public static <T> BaseResponse<T> success(T data) {
        return new BaseResponse<>(0, data, "操作成功");
    }

    /**
     * 返回成功，不带数据
     *
     * @return 不带有数据的成功响应对象
     */
    public static  BaseResponse<Void> success() {
        return new BaseResponse<>(0, null, "操作成功");
    }

    /**
     * 返回失败，使用错误码
     *
     * @param errorCode 错误码对象，包含错误信息
     * @return 带有错误码的失败响应对象
     */
    public static  BaseResponse<?> error(ErrorCode errorCode) {
        return new BaseResponse<>(errorCode);
    }

    /**
     * 返回失败，错误码 + 自定义描述
     *
     * @param errorCode 错误码对象，包含基本错误信息
     * @param description 对错误的详细描述
     * @return 带有错误码和自定义描述的失败响应对象
     */
    public static  BaseResponse<?> error(ErrorCode errorCode, String description) {
        return new BaseResponse<>(errorCode, description);
    }

    /**
     * 返回失败，错误码 + 自定义消息 + 描述
     *
     * @param errorCode 错误码对象，包含基本错误信息
     * @param message 自定义的错误消息
     * @param description 对错误的详细描述
     * @return 带有错误码、自定义消息和描述的失败响应对象
     */
    public static BaseResponse<?> error(ErrorCode errorCode, String message, String description) {
        return new BaseResponse<>(errorCode, message, description);
    }

    /**
     * 返回失败，自定义code和消息
     *
     * @param code 自定义的错误代码
     * @param message 自定义的错误消息
     * @return 带有自定义code和消息的失败响应对象
     */
    public static BaseResponse<?> error(int code, String message) {
        return new BaseResponse<>(code, null, message);
    }

    /**
     * 返回失败，自定义code、消息和描述
     *
     * @param code 自定义的错误代码
     * @param message 自定义的错误消息
     * @param description 对错误的详细描述
     * @return 带有自定义code、消息和描述的失败响应对象
     */
    public static BaseResponse<?> error(int code, String message, String description) {
        return new BaseResponse<>(code, null, message, description);
    }


}
